package main

import "fmt"

// 用这种习惯用法写一个程序，有两个协程，第一个提供数字 0，10，20，...，90 并将他们放入通道，
// 第二个协程从通道中读取并打印。main() 等待两个协程完成后再结束

func main() {
	ch := make(chan int, 10)
	// w := make(chan bool)
	done := make(chan bool)
	// for i := 0; i < 10; i++ {
	// 	go func(c chan int, d int) {
	// 		c <- d * 10
	// 	}(ch, i)
	// }

	// for i := 0; i < 10; i++ {
	// 	go func(c chan int, ok chan bool) {
	// 		fmt.Println("chan int: ", <-c)
	// 		ok <- true
	// 	}(ch, w)
	// }
	go func(ch chan<- int, n int) {
		for i := 0; i < n; i++ {
			ch <- i * 10
		}
	}(ch, 10)

	go func(ch <-chan int, n int, d chan<- bool) {
		for i := 0; i < n; i++ {
			fmt.Println(<-ch)
		}
		d <- true
	}(ch, 10, done)

	<-done
	// waitChanBool(w, 10)
}

func waitChanBool(ch chan bool, n int) {
	for i := 0; i < n; i++ {
		<-ch
	}
}
